package Constraints.Impl;

import Constraints.IConstraint;
import Core.ErrorMessage;
import Model.Draw.Entities.LinkDraw;
import Model.Draw.ICommunicatorDraw;
import java.util.ArrayList;
import java.util.List;

/**
 * Projeto de TCC: Editor de Diagramas de comunicação BlueJ
 * @author Jose
 */
public class MessageConstraint implements IConstraint {

    @Override
    public List<ErrorMessage> Validate(Object obj) {
        List<ErrorMessage> errors = new ArrayList<ErrorMessage>();
        List<Object> elements = (List<Object>) obj;
        LinkDraw link = null;
        ICommunicatorDraw targetElement = null;
        try {
            link = (LinkDraw) elements.get(0);
        } catch (Exception e) {
            errors.add(new ErrorMessage("MessageEntity", "A mensagem que você está criando não está vinculado a nenhuma LIGAÇÃO válida.(Selecione primeiro a LIGAÇÃO que a mensagem estará vinculada.)"));
        }
        if (elements.size() >= 2) {
            try {
                targetElement = (ICommunicatorDraw) elements.get(1);
            } catch (Exception e) {
                errors.add(new ErrorMessage("MessageEntity", "A mensagem que você está criando não está vinculado a nenhum OBJETO de destino válido.(Selecione o OBJETO para o qual a mensagem irá ser direcionada.)"));
            }
            if(targetElement != null && link != null){
                if(!link.getSourceDraw().equals(targetElement) && !link.getTargetDraw().equals(targetElement))
                    errors.add(new ErrorMessage("MessageEntity", "O objeto selecionado como DESTINO não tem uma ligação com o objeto ORIGEM."));
            }
        }

        return errors.isEmpty() ? null : errors;
    }
}
